package ec.edu.ups.cidi.siia.plamdep.frontend.controlador;


import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.inject.Inject;
import ec.edu.ups.cidi.siia.plamdep.frontend.modelo.Archivo;
import ec.edu.ups.cidi.siia.plamdep.frontend.wsclient.ClienteAnalisis;
import ec.edu.ups.cidi.siia.plamdep.frontend.wsclient.analisis.*;

@ManagedBean
@SessionScoped
public class AnalisisBean 
{
	@Inject ClienteAnalisis cliente;

	

	private List<Archivo> files=new ArrayList<Archivo>() ;
	private SolicitudAnalisis analisis;
	private Respuesta respuesta;
	private String fuenteLocal="/opt/txt.txt";
	private String peticion="";
	
	public String getPeticion() {
		
		return peticion;
	}

	public void setPeticion(String peticion) {
		this.peticion = peticion;
	}
	public String getFuenteLocal() {
		return fuenteLocal;
	}



	public void setFuenteLocal(String fuenteLocal) {
		this.fuenteLocal = fuenteLocal;
	}



	public SolicitudAnalisis getAnalisis() {
		return analisis;
	}
	public String getRutaPDF()
	{
	try{
			String contexto=(String) FacesContext.getCurrentInstance().getExternalContext().getContext();
			String path=contexto+"/resources/reportes/?path="+respuesta.getRutaReporte().replace(System.getProperty("plamdep.resources.path"), "");
			return path;
			
		}catch(Exception e){}
		
		
		
		return "";
	}


	public void setAnalisis(SolicitudAnalisis analisis) {
		this.analisis = analisis;
		
	}



	public Respuesta getRespuesta() {
		return respuesta;
	}



	public void setRespuesta(Respuesta respuesta) {
		this.respuesta = respuesta;
	}

	public List<Archivo> getFiles() 
	{	
			return files;
	}
	
	public void setFiles(List<Archivo> files) {this.files = files;}
	
	public void addFiles(Archivo f)
	{
		System.out.println("AddFile");
		files.add(f);
	}
	@PostConstruct
	public void init()
	{
        analisis=new SolicitudAnalisis();
		respuesta= new Respuesta ();
	}
	
	
	public String analizar()
	{
		
		try {
			
		
			for(Archivo a:files) //agrega los archivos como posibles fuentes, execepto el sospechoso seleccionado
			  if(!a.getRuta().equalsIgnoreCase(analisis.getRutaArchivoSospechoso()))
				analisis.getFuentesLocales().add(a.getRuta());
				
			System.out.println("Validando solicitud de analisis..");
			analisis.setNumeroImg(5);
			
			String msgValidacion=validarAnalisis();
			if(msgValidacion.length()==0)
			{	System.out.println("Invocando WS..");
				this.respuesta=cliente.analizar(analisis);
			}
			else
			{
				System.out.println("Error de validacion de analisis..");
				this.respuesta.setCodigoPeticion("");
				FacesContext context = FacesContext.getCurrentInstance();
				context.addMessage(null, new FacesMessage(msgValidacion,msgValidacion));
		
			}	
						
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			System.out.println("Error al conectar el WS");
		}
		System.out.println("Termina metodo analisis..");
		return null;
		
	}
	
	public String validarAnalisis()
	{
		String msg="";
		 if(analisis.getFuentesLocales().size()==0)
			 if(analisis.isBusquedaWeb()==false)
			   msg="No se puede hacer un analisis local sin fuentes cargadas";
		 
		 
		return msg;
	}
	
	public void verEstado()
	{
		
		try {
			this.respuesta=cliente.verEstado(peticion);
			
		} catch (Exception e) {
			System.out.println("Error al conectar el WS");
		}
		
		
	}
	
	public boolean fileLoaded()
	{
		try
		{
			if(files.size()>0)
			return true;
			
		}catch(Exception e){}
		
		return false;
		
	}
	
	    
	public String limpiar()
	{
		System.out.println("Limpiando parametros de sesion");
		files=new ArrayList<Archivo>();
		return "analisis.jsf?faces-redirect=true";
		
	}

}
